14  读取Excel文件

14.1 引言Excel在金融数据交换中的地位

尽管Python和数据库在金融分析中日益重要,Excel仍然是: - 数据交换: 数据源和报告的标准格式 - 人工输入: 交易员和分析师的常用工具 - 遗留系统: 许多老系统仍使用Excel

14.2 read_excel函数

列表 14.1
# 注:stores.xlsx数据文件本地没有,但平台已经内置

# =============================================================================
# 题目:使用read_excel读取Excel文件
# =============================================================================
# 本示例演示如何从Excel文件读取特定工作表和数据范围
# 金融应用:读取交易所提供的股票行情数据、财务报表Excel文件等

# ==================== 导入库 ====================
import pandas as pd  # 导入Pandas库,用于读取和处理Excel数据

# ==================== 基础读取Excel ====================
# 读取Excel文件的特定工作表和数据范围
df = pd.read_excel(
    "stores.xlsx",  # Excel文件路径(可以是相对路径或绝对路径)
    sheet_name="2019",    # 指定工作表名称(可以是名称字符串或索引数字)
    skiprows=1,           # 跳过前1行(常用于跳过标题行或说明行)
    usecols="B:F"         # 只读取B列到F列(可用字母范围或列名列表)
)
# 返回:包含读取数据的DataFrame对象

print("数据框信息:")  # 打印提示信息
print(df.info())  # 显示DataFrame的详细信息(列名、数据类型、非空值数量等)

参数详解: - sheet_name: 工作表名或索引 - skiprows: 跳过的行数 - usecols: 读取的列(字母或列名列表) - dtype: 指定列的数据类型 - converters: 列转换函数字典

14.3 数据类型转换

列表 14.2
# ⚠️ 平台原始代码 - 请原样输入至教学平台(注释除外),平台才会判定答案正确
# 注:stores.xlsx数据文件本地没有,但平台已经内置
import pandas as pd  # 导入Pandas数据分析库

df = pd.read_excel("stores.xlsx",sheet_name="2019", skiprows=1, usecols="B:F")  # 从Excel文件读取数据存入df
print(df.info())  # 输出数据框基本信息

def fix_missing(x):  # 定义函数fix_missing
  return False if x in ["", "MISSING"] else x  # 返回计算结果

# 从Excel文件读取数据存入df2
df2 = pd.read_excel("stores.xlsx",sheet_name="2019", skiprows=1, usecols="B:F",converters={"Flagship": fix_missing})
print(df2.info())  # 输出数据框基本信息
print(df2)  # 输出数据框数据

with pd.ExcelFile("stores.xlsx") as f:  # 使用上下文管理器
  # 从Excel文件读取数据存入data1
  data1 = pd.read_excel(f, "2019", skiprows=1, usecols="B:F", nrows=2,converters={"Flagship": fix_missing})
  # 从Excel文件读取数据存入data2
  data2 = pd.read_excel(f, "2020", skiprows=1, usecols="B:F", nrows=2,converters={"Flagship": fix_missing})

print(data1)  # 输出数据数据

14.4 ExcelFile类高效读取多表

列表 14.3
# 注:stores.xlsx数据文件本地没有,且fix_missing函数定义于上方平台任务代码块中

# =============================================================================
# 题目:使用ExcelFile类高效读取多个工作表
# =============================================================================
# 本示例演示使用ExcelFile类一次性打开文件并读取多个工作表
# 金融应用:读取同一Excel文件中的多年财务数据、多个子公司的报表等

# ==================== 使用with语句打开Excel文件 ====================
# 使用ExcelFile类打开文件(提高多次读取效率)
with pd.ExcelFile("stores.xlsx") as f:
    # with语句确保文件在使用后自动关闭,释放系统资源
    # f是ExcelFile对象,代表已打开的Excel文件

    # ==================== 读取2019年数据 ====================
    # 读取2019年工作表的前2行数据
    data1 = pd.read_excel(
        f,  # 传入已打开的ExcelFile对象,而非文件路径
        "2019",  # 工作表名称
        skiprows=1,  # 跳过第1行
        usecols="B:F",  # 读取B到F列
        nrows=2,  # 只读取前2行数据(用于快速预览或测试)
        converters={"Flagship": fix_missing}  # 应用转换函数
    )
    # nrows参数常用于:数据预览、限制读取量、测试数据格式等

    # ==================== 读取2020年数据 ====================
    # 读取2020年工作表的前2行数据
    data2 = pd.read_excel(
        f,  # 复用同一个ExcelFile对象,避免重复打开文件
        "2020",  # 工作表名称
        skiprows=1,  # 跳过第1行
        usecols="B:F",  # 读取B到F列
        nrows=2,  # 只读取前2行
        converters={"Flagship": fix_missing}  # 应用转换函数
    )

# ==================== 显示读取结果 ====================
print("2019年前2行:")  # 打印提示信息
print(data1)  # 显示2019年数据
print(f"\n2020年前2行:")  # 打印提示信息(带换行)
print(data2)  # 显示2020年数据

优势: - 只打开文件一次 - 适合读取多个工作表 - 自动管理文件句柄